package com.example.librarymanagementsystembackend.usermanagement.mapper;

import com.example.librarymanagementsystembackend.usermanagement.entity.UserAction;
import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.*;
import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface UserActionMapper {

    /**
     * 插入用户操作记录（自动回填生成的主键ID）
     * @param userAction 用户操作记录实体
     * @return 影响的行数（1表示成功）
     */
    @Insert("INSERT INTO useractions (userId, actionTime, actionContent) VALUES (#{userId}, #{actionTime}, #{actionContent})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insert(UserAction userAction);

    /**
     * 根据主键ID查询操作记录
     * @param id 操作记录主键ID
     * @return 用户操作记录实体（不存在时返回null）
     */
    @Select("SELECT id, userId, actionTime, actionContent FROM useractions WHERE id = #{id}")
    UserAction selectById(Integer id);

    /**
     * 根据主键ID删除操作记录
     * @param id 操作记录主键ID
     * @return 影响的行数（1表示成功，0表示未找到）
     */
    @Delete("DELETE FROM useractions WHERE id = #{id}")
    int deleteById(Integer id);

    /**
     * 扩展方法：根据用户ID查询操作记录（按时间倒序）
     * @param userId 用户ID
     * @return 用户操作记录列表（无记录时返回空列表）
     */
    @Select("SELECT id, userId, actionTime, actionContent FROM useractions WHERE userId = #{userId} ORDER BY actionTime DESC")
    List<UserAction> selectByUserId(Integer userId);

    /**
     * 扩展方法：查询指定时间范围内的操作记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 用户操作记录列表（无记录时返回空列表）
     */
    @Select("SELECT id, userId, actionTime, actionContent FROM useractions WHERE actionTime BETWEEN #{startTime} AND #{endTime}")
    List<UserAction> selectByTimeRange(LocalDateTime startTime, LocalDateTime endTime);
}